<script setup>
import { onLaunch, onShow, onHide } from '@dcloudio/uni-app'

// 应用启动时的处理
onLaunch(async (options) => {
  console.log('App Launch')
  // 小程序主动更新
  updateManager()
  if (options.query.spm) {
    uni.setStorageSync('shareId', options.query.spm)
  }
})

// 应用显示时的处理
onShow(() => {
  console.log('App Show')
  // 每次进入小程序时检查更新
  updateManager()
})

// 应用隐藏时的处理
onHide(() => {
  console.log('App Hide')
})

// 小程序更新管理器
const updateManager = () => {
  // #ifdef MP-WEIXIN
  // 检查微信版本是否支持更新管理器
  if (!uni.getUpdateManager) {
    console.log('当前微信版本过低，无法使用更新管理器功能')
    return
  }
  
  const updateManager = uni.getUpdateManager()
  
  // 检查是否有新版本
  updateManager.onCheckForUpdate(function (res) {
    // 请求完新版本信息的回调
    console.log('onCheckForUpdate====', res.hasUpdate)
    if (res.hasUpdate) {
      console.log('检测到新版本')
      // 可以在这里添加检测到新版本的提示
    }
  })
  
  // 新版本下载成功
  updateManager.onUpdateReady(function () {
    uni.showModal({
      title: '更新提示',
      content: '新版本已经准备好，是否立即重启应用更新？',
      confirmText: '立即更新',
      cancelText: '稍后更新',
      success: function (res) {
        if (res.confirm) {
          // 新的版本已经下载好，调用 applyUpdate 应用新版本并重启
          updateManager.applyUpdate()
        } else if (res.cancel) {
          // 用户点击稍后更新，可以记录用户选择，下次进入时再次提醒
          console.log('用户选择稍后更新')
        }
      }
    })
  })
  
  // 新版本下载失败
  updateManager.onUpdateFailed(function () {
    // 新版本下载失败
    uni.showModal({
      title: '更新提示',
      content: '新版本下载失败，请检查网络设置或稍后重试',
      showCancel: false,
      confirmText: '知道了'
    })
  })
  // #endif
}

// 手动检查更新功能（可以在设置页面调用）
function checkForUpdate() {
  // #ifdef MP-WEIXIN
  if (!uni.getUpdateManager) {
    uni.showToast({
      title: '当前微信版本过低',
      icon: 'none'
    })
    return
  }
  
  uni.showLoading({
    title: '检查更新中...'
  })
  
  const updateManager = uni.getUpdateManager()
  
  // 检查是否有新版本
  updateManager.onCheckForUpdate(function (res) {
    uni.hideLoading()
    if (res.hasUpdate) {
      // 有新版本，系统会自动下载
      uni.showToast({
        title: '正在后台下载新版本...',
        icon: 'none'
      })
    } else {
      // 没有新版本
      uni.showToast({
        title: '当前已是最新版本',
        icon: 'success'
      })
    }
  })
  // #endif
}

// 暴露检查更新方法给其他页面使用
uni.checkForUpdate = checkForUpdate
</script>

<style lang="scss">
/*每个页面公共css */
@import "uview-plus/index.scss";
</style>